/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.epsgrau.entity;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import org.codehaus.jackson.annotate.JsonIgnore;

/**
 *
 * @author Miguel
 */
@Entity
@Table(name = "proceso", catalog = "bd_procesos", schema = "public")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Proceso.findAll", query = "SELECT p FROM Proceso p"),
    @NamedQuery(name = "Proceso.findByIdProceso", query = "SELECT p FROM Proceso p WHERE p.idProceso = :idProceso"),
    @NamedQuery(name = "Proceso.findByNroExpediente", query = "SELECT p FROM Proceso p WHERE p.nroExpediente = :nroExpediente"),
    @NamedQuery(name = "Proceso.findByDemandante", query = "SELECT p FROM Proceso p WHERE p.demandante = :demandante"),
    @NamedQuery(name = "Proceso.findByDemandado", query = "SELECT p FROM Proceso p WHERE p.demandado = :demandado"),
    @NamedQuery(name = "Proceso.findByFechaDemanda", query = "SELECT p FROM Proceso p WHERE p.fechaDemanda = :fechaDemanda"),
    @NamedQuery(name = "Proceso.findByFechaRegistro", query = "SELECT p FROM Proceso p WHERE p.fechaRegistro = :fechaRegistro"),
    @NamedQuery(name = "Proceso.findByFechaFinalizacion", query = "SELECT p FROM Proceso p WHERE p.fechaFinalizacion = :fechaFinalizacion"),
    @NamedQuery(name = "Proceso.findByMontoDemandado", query = "SELECT p FROM Proceso p WHERE p.montoDemandado = :montoDemandado"),
    @NamedQuery(name = "Proceso.findByMontoAcordado", query = "SELECT p FROM Proceso p WHERE p.montoAcordado = :montoAcordado"),
    @NamedQuery(name = "Proceso.findByObservacion", query = "SELECT p FROM Proceso p WHERE p.observacion = :observacion"),
    @NamedQuery(name = "Proceso.findByEstrabajador", query = "SELECT p FROM Proceso p WHERE p.estrabajador = :estrabajador")})
public class Proceso implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @Column(name = "id_proceso", nullable = false, length = 10)
    private String idProceso;
    @Column(name = "nro_expediente", length = 10)
    private String nroExpediente;
    @Column(name = "demandante", length = 50)
    private String demandante;
    @Column(name = "demandado", length = 50)
    private String demandado;
    @Column(name = "fecha_demanda")
    @Temporal(TemporalType.DATE)
    private Date fechaDemanda;
    @Column(name = "fecha_registro")
    @Temporal(TemporalType.DATE)
    private Date fechaRegistro;
    @Column(name = "fecha_finalizacion")
    @Temporal(TemporalType.DATE)
    private Date fechaFinalizacion;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "monto_demandado", precision = 15, scale = 3)
    private BigDecimal montoDemandado;
    @Column(name = "monto_acordado", precision = 15, scale = 3)
    private BigDecimal montoAcordado;
    @Column(name = "observacion", length = 200)
    private String observacion;
    @Column(name = "estrabajador")
    private Boolean estrabajador;
    @OneToMany(mappedBy = "idProceso", fetch = FetchType.LAZY)
    private List<ActividadDetalle> actividadDetalleList;
    @JoinColumn(name = "id_tipoproceso", referencedColumnName = "id_tipoproceso")
    @ManyToOne(fetch = FetchType.LAZY)
    private TipoProceso idTipoproceso;
    @JoinColumn(name = "id_responsable", referencedColumnName = "id_responsable")
    @ManyToOne(fetch = FetchType.LAZY)
    private Responsable idResponsable;
    @JoinColumn(name = "id_ramaproceso", referencedColumnName = "id_ramaproceso")
    @ManyToOne(fetch = FetchType.LAZY)
    private RamaProceso idRamaproceso;
    @JoinColumn(name = "id_materiaproceso", referencedColumnName = "id_materiaproceso")
    @ManyToOne(fetch = FetchType.LAZY)
    private MateriaProceso idMateriaproceso;
    @JoinColumn(name = "id_estadolaboral", referencedColumnName = "id_estadolaboral")
    @ManyToOne(fetch = FetchType.LAZY)
    private EstadoLaboral idEstadolaboral;
    @OneToMany(mappedBy = "idProceso", fetch = FetchType.LAZY)
    private List<GastoDetalle> gastoDetalleList;
    @OneToMany(mappedBy = "idProceso", fetch = FetchType.LAZY)
    private List<EstadoProcesal> estadoProcesalList;

    public Proceso() {
    }

    public Proceso(String idProceso) {
        this.idProceso = idProceso;
    }

    public String getIdProceso() {
        return idProceso;
    }

    public void setIdProceso(String idProceso) {
        this.idProceso = idProceso;
    }

    public String getNroExpediente() {
        return nroExpediente;
    }

    public void setNroExpediente(String nroExpediente) {
        this.nroExpediente = nroExpediente;
    }

    public String getDemandante() {
        return demandante;
    }

    public void setDemandante(String demandante) {
        this.demandante = demandante;
    }

    public String getDemandado() {
        return demandado;
    }

    public void setDemandado(String demandado) {
        this.demandado = demandado;
    }

    public Date getFechaDemanda() {
        return fechaDemanda;
    }

    public void setFechaDemanda(Date fechaDemanda) {
        this.fechaDemanda = fechaDemanda;
    }

    public Date getFechaRegistro() {
        return fechaRegistro;
    }

    public void setFechaRegistro(Date fechaRegistro) {
        this.fechaRegistro = fechaRegistro;
    }

    public Date getFechaFinalizacion() {
        return fechaFinalizacion;
    }

    public void setFechaFinalizacion(Date fechaFinalizacion) {
        this.fechaFinalizacion = fechaFinalizacion;
    }

    public BigDecimal getMontoDemandado() {
        return montoDemandado;
    }

    public void setMontoDemandado(BigDecimal montoDemandado) {
        this.montoDemandado = montoDemandado;
    }

    public BigDecimal getMontoAcordado() {
        return montoAcordado;
    }

    public void setMontoAcordado(BigDecimal montoAcordado) {
        this.montoAcordado = montoAcordado;
    }

    public String getObservacion() {
        return observacion;
    }

    public void setObservacion(String observacion) {
        this.observacion = observacion;
    }

    public Boolean getEstrabajador() {
        return estrabajador;
    }

    public void setEstrabajador(Boolean estrabajador) {
        this.estrabajador = estrabajador;
    }

    @XmlTransient
    @JsonIgnore
    public List<ActividadDetalle> getActividadDetalleList() {
        return actividadDetalleList;
    }

    public void setActividadDetalleList(List<ActividadDetalle> actividadDetalleList) {
        this.actividadDetalleList = actividadDetalleList;
    }

    public TipoProceso getIdTipoproceso() {
        return idTipoproceso;
    }

    public void setIdTipoproceso(TipoProceso idTipoproceso) {
        this.idTipoproceso = idTipoproceso;
    }

    public Responsable getIdResponsable() {
        return idResponsable;
    }

    public void setIdResponsable(Responsable idResponsable) {
        this.idResponsable = idResponsable;
    }

    public RamaProceso getIdRamaproceso() {
        return idRamaproceso;
    }

    public void setIdRamaproceso(RamaProceso idRamaproceso) {
        this.idRamaproceso = idRamaproceso;
    }

    public MateriaProceso getIdMateriaproceso() {
        return idMateriaproceso;
    }

    public void setIdMateriaproceso(MateriaProceso idMateriaproceso) {
        this.idMateriaproceso = idMateriaproceso;
    }

    public EstadoLaboral getIdEstadolaboral() {
        return idEstadolaboral;
    }

    public void setIdEstadolaboral(EstadoLaboral idEstadolaboral) {
        this.idEstadolaboral = idEstadolaboral;
    }

    @XmlTransient
    @JsonIgnore
    public List<GastoDetalle> getGastoDetalleList() {
        return gastoDetalleList;
    }

    public void setGastoDetalleList(List<GastoDetalle> gastoDetalleList) {
        this.gastoDetalleList = gastoDetalleList;
    }

    @XmlTransient
    @JsonIgnore
    public List<EstadoProcesal> getEstadoProcesalList() {
        return estadoProcesalList;
    }

    public void setEstadoProcesalList(List<EstadoProcesal> estadoProcesalList) {
        this.estadoProcesalList = estadoProcesalList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idProceso != null ? idProceso.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Proceso)) {
            return false;
        }
        Proceso other = (Proceso) object;
        if ((this.idProceso == null && other.idProceso != null) || (this.idProceso != null && !this.idProceso.equals(other.idProceso))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "org.epsgrau.entity.Proceso[ idProceso=" + idProceso + " ]";
    }
    
}
